iT邦幫忙

2022 iThome 鐵人賽

DAY 3
1
DevOps

從零開始的Kubernetes轉換系列 第 3

IaC Terraform provision(一) - terraform 簡介

  • 分享至 

  • xImage
  •  

什麼是 Infrastructure as Code(IaC)

一般來說我們要在 GCP 上開啟一台 VM ,我們會怎麼做呢?
一種方法是我們會到到 GCP 的 Console 上面選取 create an instance ,像是下面的圖

或者是我們會選擇使用 gcloud 的 CLI 來處理舉例如下

gcloud compute instances create testvm \
       --image-family=debian-10 \
       --image-project=debian-cloud \
       --machine-type=e2-micro

因此我們可以說用 gcloud 搭配 ansible 可以做些自動化的 configuration management 但是問題來了,我們如何知道 GCP 上面我們有哪些 resource ,以及我們已經建立了什麼 resource 還有什麼 resource 我們還沒有建立。這個『狀態』我們只能從GUI或是從各個gcloud CLI去撈取所有資源的API。

但是今天 terraform 提供了另外一個方法,我們可以用寫 HCL 的語言去定義我們的 Infra ,並且在部署後看到資源的狀態。實現了我們可以把 Infrastructure 定義在 Code 的層面。後面則可以交由 CI/CD 甚至是使用 GitOps 來 Deploy 我們的 Infrastructure 。並且可以在寫好 IaC 的 Code 之後分散到不同的環境中,像是 Dev/Staging(UAT)/Production。達到 Keep Code DRY 的目標。

因此今天我們會先介紹 Terraform 這個工具的基礎應用, 接下來我們再一步步深入 Terraform 細節.


安裝Terraform

Terraform 是一個由 HashiCorp 所開發出來的 IaC Tool 大家可以到 HashiCorp 的官網直接下載 Terraform 的執行檔。但是我們有時候會需要管理不一樣的 Terraform 版本,所以我們可以使用 tfenv 這套軟體來管理我們的 Terraform 版本。

像筆者使用Mac可以下

brew install tfenv

其他的系統可以依照 tfenv github 的 README 安裝網址如下

https://github.com/tfutils/tfenv/blob/master/README.md

安裝完畢後我們可以先使用 list-remote 看有哪些版本 然後安裝想要使用的版本

tfenv list-remote
tfenv install 1.2.4                                                 

Installing Terraform v1.2.4
Downloading release tarball from https://releases.hashicorp.com/terraform/1.2.4/terraform_1.2.4_darwin_amd64.zip

tfenv use 1.2.4

在使用 tfenv use 1.2.4 之後我們就可以開始使用terraform啦

terraform version

Terraform v1.2.4
on darwin_amd64

撰寫第一個terraform

首先呢 terraform 大致上分成以下幾個檔案

  • main.tf
  • terraform.tfvars
  • variable.tf

我們先來一個最簡單的例子, 我們可以參考
terraform registry google compute instance
來寫我們的terraform

main.tf

resource "google_compute_instance" "default" {
  name         = "testvm"
  machine_type = "e2-micro"
  zone         = var.zone
  
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-10"
    }
  }
  network_interface {
    network = "default"
  }
}

variable.tf

variable "zone" {
  type = string
}

terraform.tfvars

zone = "us-west1-a"

如果你是在GCP console裡面寫terraform file則可以馬上執行

可以在目錄中下terraform init

terraform init
terraform plan

在terraform plan 我們可以檢查一下語法和要開啟的機器有沒有設定上面符合我們預期的樣子

之後下terraform apply 然後選yes

如果成功就會在GCP console上看到一台VM啦

下一篇我們會介紹 terraform 如何使用 GCP 的 credential 以及怎麼使用gcs來當做storage backend


上一篇
搬移前的準備
下一篇
IaC Terraform provision(二)-讓 terraform 使用 GCP IAM service account
系列文
從零開始的Kubernetes轉換30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

推 Terraform IaC 參賽主題
祝順利完賽

百九 iT邦新手 5 級 ‧ 2022-09-20 10:26:52 檢舉

感謝你, 原來也是terraform高手, 祝福你也順利完賽

我要留言

立即登入留言